<?php

namespace App\Admin\Models;

use App\Admin\Models\BaseModel;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\MessageBag;
use Ixudra\Curl\Facades\Curl;
use Encore\Admin\Facades\Admin;
use DB;

class Product extends BaseModel
{
    //指定主键
    protected $primaryKey = 'sgId';

    public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
    {
        $perPage = Request::get('per_page', 20);

        $page = Request::get('page', 1);

        $start = ($page-1)*$perPage;

		///////获取数据//////////////////////////////////////////////////////////////////////////////////////
		$sId = Admin::user()->sId;

		$url = $this->host."/storeGoods/getList?page={$page}&perPage={$perPage}&scKey={$sId}&notChild=1";
		$response = Curl::to($url)->get();
		$data = $this->handelApiData($response);

		////////获取数据/////////////////////////////////////////////////////////////////////////////////////

		$total = $data['count'];

        extract($data['data']);

        $tags = static::hydrate($data['data']);

        $paginator = new LengthAwarePaginator($tags, $total, $perPage);

        $paginator->setPath(url()->current());

        return $paginator;
    }

    public static function with($relations)
    {
        return new static;
    }

    /**
     * Add a basic where clause to the query.
     *
     * @param  string|array|\Closure  $column
     * @param  mixed   $operator
     * @param  mixed   $value
     * @param  string  $boolean
     * @return $this
     */
    public function where($column, $operator = null, $value = null, $boolean = 'and'){
    	// http://localhost:96/admin/remark/remarkTag?rtcId=1
    	// $column rtcId
    	// $operator 1
    	// $value null
    	// $boolean and
    	return $this;
    }

    // 获取单项数据展示在form中
	public function findOrFail($id)
	{
		$sId = Admin::user()->sId;
		$url = $this->host."/storeGoods/get/{$id}?mcKey=".$sId;
		$response = Curl::to($url)->get();
		$data = $this->handelApiData($response);
		$data['sgPicList'] = json_decode($data['sgPicList'], true);

	    return static::newFromBuilder($data);
	}

	// 保存提交的form数据
	public function save(array $options = Array())
	{
	    $attributes = $this->getAttributes();
//	    print_r(json_encode($attributes));exit;
	    $userName = Admin::user()->name;
	    $now = date('Y-m-d H:i:s', time());
	    // 根据是否有id判断添加还是更新
	    if (isset($attributes['sgId'])){
	    	$ignore = ['sgNum','createUser', 'createTime', 'updateUser', 'updateTime'];
		    $newAttributes = array();
		    foreach($attributes as $key => $value){
		    	if (!in_array($key, $ignore)){
		    		$newAttributes[$key] = $value;
		    	}
		    }
		    $imgHost = 'http://'.config('filesystems.disks.qiniu.domain').'/';
			if (isset($newAttributes['sgPicList'])){
				for($i=0;$i<count($newAttributes['sgPicList']);$i++){
					if (substr($newAttributes['sgPicList'][$i], 0, 4) != "http"){
						$newAttributes['sgPicList'][$i] = $imgHost.$newAttributes['sgPicList'][$i];
					}
				}
				$newAttributes['sgPicList'] = json_encode($newAttributes['sgPicList']);
			}
		    $newAttributes['updateUser'] = $userName;
			$url = $this->host."/storeGoods/edit";
	    }else{
	    	$ignore = ['createUser', 'createTime', 'updateUser', 'updateTime'];
		    $newAttributes = array();

		    foreach($attributes as $key => $value){
                if (substr($key, 0, 8) == 'sgPrice_'){
                    // DB::table('agency_goods_price')->insert([
                    //     'acId' => Admin::user()->sId,
                    //     'goodsId' => $newAttributes['sgId'],
                    //     'alLevel' => explode("_",$key)[1],
                    //     'goodsPrice' => $value,
                    //     'createUser' => $userName,
                    // ]);
                    $newAttributes['sgPrice'] = $value;
                    continue;
                }
                if (!in_array($key, $ignore)){
                	$newAttributes[$key] = $value;
                }
		    }

			if (isset($newAttributes['sgLogo'])){
				$imgHost = 'http://'.config('filesystems.disks.qiniu.domain').'/';
				$newAttributes['sgLogo'] = $imgHost.$newAttributes['sgLogo'];
			}
			if (isset($newAttributes['sgPicList'])){
				for($i=0;$i<count($newAttributes['sgPicList']);$i++){
					$newAttributes['sgPicList'][$i] = $imgHost.$newAttributes['sgPicList'][$i];
				}
				$newAttributes['sgPicList'] = json_encode($newAttributes['sgPicList']);
			}
		    $newAttributes['createUser'] = $userName;
			$url = $this->host."/storeGoods/add";
			if ($newAttributes['sgIsTimeCard'] == 1){
				$newAttributes['sgNum'] = 1000000;
			}
	    }

	    $sId = Admin::user()->sId;
	    $newAttributes['scKey'] = $sId;
	    $newAttributes['sId'] = $sId;
		$response = Curl::to($url)
					->withData($newAttributes)
					->post();

		$data = json_decode($response, true);
		if (!isset($data['code'])){
			$error = new MessageBag([
		        'title'   => '系统错误',
		        'message' => '',
		    ]);

		    return back()->with(compact('error'));
		}
		if ($data['code'] == 0){

			    $error = new MessageBag([
			        'title'   => '保存失败',
			        'message' => $data['msg'],
			    ]);

			    return back()->with(compact('error'));

		}else{
            $sgId = 0;
            if (isset($attributes['sgId'])){
                $sgId = $attributes['sgId'];
            }else{
                $sgId = $data['data'];
            }
            $sId = Admin::user()->sId;
            DB::table('agency_goods_price')->where('acId', $sId)->where('goodsId', $sgId)->delete();
            foreach($attributes as $key => $value){
                if (substr($key, 0, 8) == 'sgPrice_'){
                    DB::table('agency_goods_price')->insert([
                        'acId' => $sId,
                        'goodsId' => $sgId,
                        'alLevel' => explode('_', $key)[1],
                        'goodsPrice' => $_POST[$key],
                        'createUser' => $userName,
                    ]);
                    if ($key == 'sgPrice_1'){
                        DB::table('store_goods')->where('sgId', $sgId)->update(['sgPrice'=>$_POST[$key]]);
                    }
                }
            }

            $success = new MessageBag([
                'title'   => '保存成功',
                'message' => $data['msg'],
            ]);

            return back()->with(compact('success'));
		}

		return $this;
	}

	// 重写此方法，因为删除前要调用。不写则报错
	public function find($id){
		$this->sgId = $id;
		return $this;
	}

	// 重写删除方法
	public function delete(){

		$attributes = $this->getAttributes();

		$remarkKey = config('services.extend.remarkKey');
		$remarkHost = config('services.extend.remarkHost');
		$url = $remarkHost.'/api/remark/delTag';

		// 请求外部数据
		$Functions = new Functions();
		$attributes['rcKey'] = $remarkKey;

		$data = $Functions->Post($url, $attributes);
		$data = json_decode($data, true);
		if (!isset($data['code'])){
			$error = new MessageBag([
		        'title'   => '系统错误',
		        'message' => '',
		    ]);

		    return back()->with(compact('success'));
		}
		if ($data['code'] == 0){
			// 抛出错误信息
			$this->saving(function ($form) {

			    $error = new MessageBag([
			        'title'   => '保存失败',
			        'message' => $data['msg'],
			    ]);

			    return back()->with(compact('error'));
			});
		}else{
			// 抛出错误信息
			$this->saving(function ($form) {

			    $error = new MessageBag([
			        'title'   => '保存成功',
			        'message' => $data['msg'],
			    ]);

			    return back()->with(compact('success'));
			});
		}

		return $this;
	}



}
